package com.chinaedu.oc.sdk.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


import com.alibaba.fastjson.JSON;
import com.chinaedu.oc.sdk.bo.Sign;
/**
 * 创建签名
 * @Description: TODO
 * @author A18ccms a18ccms_gmail_com 
 * @date 2017年5月9日 下午2:16:50 
 *
 */
public class CreateSign {
	
	
//	/**
//	 * 创建签名
//	 * @Description: TODO
//	 * @param @param key 秘钥
//	 * @param @param obj 参数
//	 * @param @return    
//	 * @return Map<String,String>    返回类型 
//	 * @throws
//	 */
//	public Sign createSign(String key, Object obj) {
//
//		String paramData = "";
//
//		Field[] fields = obj.getClass().getDeclaredFields();
//
//		// 找出所有string类型的参数
//		List<String> list = new ArrayList<String>();
//		for (Field f : fields) {
//			if (f.getName().getClass().equals(String.class)) {
//				list.add(f.getName());
//			}
//		}
//
//		String[] strs = new String[list.size()];
//		strs = list.toArray(strs);
//		// 排序
//		Arrays.sort(strs, String.CASE_INSENSITIVE_ORDER);
//
//		// 获取每个属性的值，并组成一个字符串
//		Class clazz = obj.getClass();
//		String dataStr = "";
//		for (String s : strs) {
//			try {
//				Field f = clazz.getDeclaredField(s);
//				f.setAccessible(true);
//				String data = (String) f.get(obj);
//				dataStr += f.getName() + data;
//
//				paramData += "&" + f.getName() + "=" + data;
//			} catch (Exception e) {
//				e.printStackTrace();
//			}
//		}
//
//		// 获取当前毫秒数
//		Long mill = System.currentTimeMillis();
//
//		// 把秘钥，键值对，时间组合起来，并加密
//		dataStr = key + dataStr + mill;
//		String sign = MD5Util.toMD5(dataStr);
//		
//		Sign s = new Sign();
//		s.setSign(sign);
//		s.setCurrentMill(mill + "");
//
//		return s;
//
//	}
	
	
	public Sign createSign(String key, Object obj, Long mill) {
		
		
		String paramData = "";

		Field[] fields = obj.getClass().getDeclaredFields();

		// 找出所有string类型的参数
		List<String> list = new ArrayList<String>();
		for (Field f : fields) {
			if (f.getName().getClass().equals(String.class)) {
				list.add(f.getName());
			}
		}
		String[] strs = new String[list.size()];
		strs = list.toArray(strs);
		
		// 排序
		Arrays.sort(strs, String.CASE_INSENSITIVE_ORDER);
		// 获取每个属性的值，并组成一个字符串
		Class clazz = obj.getClass();
		String dataStr = "";
		for (String s : strs) {
			try {
				Field f = clazz.getDeclaredField(s);
				f.setAccessible(true);
				String data = (String) f.get(obj);
				dataStr += f.getName() + data;

				paramData += "&" + f.getName() + "=" + data;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		// 获取当前毫秒数

		// 把秘钥，键值对，时间组合起来，并加密
		dataStr = key + dataStr + mill;
		String sign = MD5Util.toMD5(dataStr);

//		Map<String, String> map = new HashMap<String, String>();
//		map.put("sign", sign);
//		map.put("mill", mill + "");
//		map.put("paramData", paramData);
		
		Sign s = new Sign();
		s.setSign(sign);
		s.setCurrentMill(mill+"");
		s.setParamData(paramData);
		
		return s;

	}

}
